iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0

今天星期天,就讓我稍微喘一口氣,
來點簡單的任務吧。 ^_^

昨天我們做了一個簡單的【翻譯編輯】功能,
可以利用【Ctrl+Shift+點擊】進入翻譯編輯界面,
也可以用【Ctrl+Enter】確認翻譯修改完成。

通常我們在進行翻譯時,
多半會一句接著一句進行翻譯。
如果可以添加【上一句】【下一句】的快速鍵,
應該是很實用的功能。

不過既然要分辨【上一句】、【下一句】,
句子之間的順序就很重要。

目前我們的 sent 標籤,並沒有明確標識出順序的關係,
雖然有 nextSibling、previousSibling 之類的屬性可用,
(還有 nextElementSibling、previousElementSibling)
但由於各個 sent 散落在整個 DOM 樹狀結構的各處,
因此這幾個屬性並不好用。

為了順利取得指定的 sent,
我們還是應該為每個 sent 標上編號:

document.querySelectorAll("sent").forEach((node, i)=>{
  node.id = `sent_${i}`
  ...

有了 id 屬性,要找到【上一句】、【下一句】就很容易了。
由於【上一句】和【下一句】甚至【上下 n 句】的處理邏輯都很類似,
所以我們只會建立一個 nextSent(nth = 1) 函式,
預設為【下一句】,若要【上一句】則設定 nth = -1 即可。

nextSent() 函式的處理邏輯就不多談了,
有興趣的人請直接參見程式碼囉。

function nextSent(nth = 1) {
  var new_sent_id = null
  // 先處理好之前的 sent,並取得其 sent_id
  var prev_sent_id = confirmModification()

  if (prev_sent_id) {
    // 再設定下一個要處理的 sent
    new_sent_id = `sent_${int(prev_sent_id.replace('sent_','')) + nth}`
    new_sent = document.querySelector(`sent#${new_sent_id}`)

    if (new_sent) {
      switchToModification(new_sent)
    }
    else {
      console.log('移動已經到了盡頭。。。')
    }
  }
  else {
    console.log('若要開始編輯翻譯,請按下【Ctrl+Shift】,再點擊您要修改的句子。')
  }

  return new_sent_id
}

值得一提的是,
nextSent() 這個函式會用到之前的 confirmModification() 函式,
而且還需要 confirmModification() 送回所操作 sent 的 id,
所以我們會稍微修改一下 confirmModification() 的內容。

function confirmModification() {
  var prev_sent_id = null
  ...
  if (prev_sent) {
    prev_sent_id = prev_sent.id
    ...
  }
  return prev_sent_id 
}    

另外,由於進入編輯界面的程式碼,
同樣會一再被使用到,
因此我們也把這段程式碼獨立出來,
建立了一個 switchToModification(node) 函式。

function switchToModification(node) {
  ...
  node.innerHTML = `<textarea>${node.innerHTML}</textarea>`
  ...
  textarea.focus()
}

在這個函式的最後,
我們特別用 .focus() 把使用者的焦點設在文字輸入框,
如此一來,每當切換到新的一句時,
就可以直接進行修改,
不需要再用滑鼠去點擊文字輸入框。

在修改翻譯的過程中,
兩手不必離開鍵盤是很重要的事。
這種使用者體驗上的考量,
其實對使用者的觀感影響非常大,
卻也是經常被工程師忽略的細節。

還好現在已經有專門負責使用者體驗的 UX 專業,
若能與程式設計工程師搭配合作,
就能發展出非常受使用者喜愛的產品了。

完成相應的函式之後,
只要再把函式對應到相應的快速鍵即可。

  ...
  else if (e.ctrlKey && e.key=='ArrowUp') {
    nextSent(-1);
  }
  else if (e.ctrlKey && e.key=='ArrowDown') {
    nextSent();
  }
  ...

這樣就完成【上一句】【下一句】的功能囉!

各位可以使用看看,
在 UX 使用者體驗方面,是不是有很明顯的提升呢?

當然,軟體改進是一個持續的進程,
好還要更好,
可說是有志者永恆的追求。

話雖如此,
但除了努力工作之外,
努力玩樂也很重要,
如果累了,
好好休息也很重要喲。

今天是星期天,我們就此打住。
明天再見囉。 ^_^


上一篇
今天真是好日子。謝謝費德洛、Pujols 和 大谷 ^_^
下一篇
保存珍貴的譯文,讓好翻譯重複再利用 —— localStorage
系列文
譯者會消失嗎?Maybe, but not today —— 你,才是更好的翻譯師30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言